/*/{Protheus.doc} SYNCLOG
E a User Function que gera e atualiza o arquivo de synchro.log com as informcoes de processamento.
@author Elton Teodoro Alves
@since 14/11/2014
@version P11 R5
@Param cMessage,Caracter,Mensagem a ser escrita no arquivo synchro.log
@Return Logico Indica se a funcao foi executada com sucesso
/*/
#Include 'Protheus.ch'
#Include 'Fileio.ch'
#Include 'Directry.ch'
#Define CRLF Chr(13) + Chr(10)

User Function SYNCLOG(cMessage)
	
	Local	cFile		:=	GetSrvProfString('StartPath','') + 'SYNCHRO\'
	Local	cFileLog	:=	'SYNCHRO.LOG'
	Local	nHandle		:=	0
	Local	cPreMsg		:=	'SYNCHRO' + ' - ' + Dtoc(Date()) + ' - ' + Time() + ' >>> ' + CRLF
	Local	aFiles		:=	{}
	
	cMessage	:= CRLF + cPreMsg + cMessage  + CRLF + Replicate('=',200)
	
	
	// Verifica se o arquivo SYNCHRO.LOG existente tem o tamanho limite definido no Parametro MV_SYNC001 e o renomeia para SYNCHRO.LOG.BAK
	
	aFiles	:=	Directory(cFile + cFileLog,,,.F.)
	
	If Len(aFiles) > 0
		
		If aFiles[1,F_SIZE] >= SuperGetMv('MV_SYNC001',.F.,1048576)
			
			If fErase(cFile + cFileLog + '.BAK') == -1
				
				ConOut(cPreMsg + 'Nao foi possivel deletar o arquivo ' + cFile + cFileLog + '.BAK')
				
			End IF
			
			IF fRename(cFile + cFileLog ,cFile + cFileLog + '.BAK') == -1
				
				ConOut(cPreMsg + 'Nao foi possivel criar o arquivo ' + cFile + cFileLog + '.BAK')
				
			End If
			
		End If
		
	End IF
	
	//Verifica se existe a pasta da SYNCHRO na pasta system e cria se necessario
	
	If .Not. ExistDir(cFile)
		
		If MakeDir(cFile) <> 0
			
			ConOut(cPreMsg + 'Erro na Criacao da pasta ' + cFile)
			ConOut(cPreMsg + cMessage)
			
			Return .F.
			
		End If
		
	End IF
	
	cFile	+=	cFileLog
	
	// Verifica se existe o arquivo de log SYNCHRO.LOG nas pasta SYNCHRO e cria se necessario
	
	If .Not. File(cFile,0,.F.)
		
		nHandle	:=	fCreate(cFile,,,.F.)
		
		If nHandle	== -1
			
			ConOut(cPreMsg + 'Nao foi possivel criar o arquivo ' + cFileLog)
			ConOut(cPreMsg + cMessage)
			
			Return .F.
			
		End If
		
		If .Not. fClose(nHandle)
			
			ConOut(cPreMsg + 'Nao foi possivel fechar o arquivo ' + cFileLog)
			ConOut(cPreMsg + cMessage)
			
			Return .F.
			
		End If
		
	End If
	
	// Abre arquivo SYNCHRO.LOG para incluir mensagem
	
	nHandle	:=	fOpen(cFile,FO_WRITE,,.F.)
	
	// Verifica se foi aberto sem erros
	
	If nHandle	<>	-1
		
		// Posiciona ponteiro no final do arquivo
		
		fSeek(nHandle,0,FS_END)
		
		// Inclui mensagem no arquivo de log e verifica se nao ocorreu erro
		
		If FWrite (nHandle,cMessage,Len(cMessage)) != Len(cMessage)
			
			ConOut(cPreMsg + 'Erro durante atualizacao do arquivo ' + cFileLog)
			ConOut(cPreMsg + cMessage)
			
			If .Not. fClose(nHandle)
				
				ConOut(cPreMsg + 'Nao foi possivel fechar o arquivo ' + cFileLog)
				ConOut(cPreMsg + cMessage)
				
			End If
			
			Return .F.
			
		End If
		
		// Verifica se fechou o arquivo com sucesso
		
		If .Not. fClose(nHandle)
			
			ConOut(cPreMsg + 'Nao foi possivel fechar o arquivo ' + cFileLog)
			ConOut(cPreMsg + cMessage)
			
		End If
		
	Else
		
		ConOut(cPreMsg + 'Nao foi possivel abrir o arquivo ' + cFileLog)
		ConOut(cPreMsg + cMessage)
		
	EndIF
	
Return .T.

